package JVM.第02篇_类的加载篇;

/**
 * ⑦卸载
 *
 * 类、类的加载器、类的实例之间的引用关系
 * 在类加载器的内部实现中，用一个Java集合来存放所加载类的引用。
 * 另一方面，一个Class对 象总是会引用它的类加载器，
 * 调用Class对 象的getClassLoader()方法，就能获得它的类加载器。
 * 由此可见，代表某个类的Class实例与其类的加载器之间为双向关联关系。
 *
 * 一个类的实例总是引用代表这个类的Class对象。
 * 在Object类中定义了getClass()方法，这个方法返回代表对象所属类的Class对象的引用。
 * 此外，所有的Java类都有一个静态属性class,它引用代表这个类的Class对象。
 *
 * 方法区的垃圾收集主要回收两部分内容:
 *      常量池中废弃的常量和不再使用的类型。
 * HotSpot虚拟机对常量池的回收策略是很明确的，
 * 只要常量池中的常量没有被任何地方引用，就可以被回收。
 * 判定一个常量是否“废弃”还是相对简单，
 * 而要判定一个类型是否属于“不再被使用的类”的条件就比较苛刻了。
 *
 * 需要同时满足下面三个条件:
 * ● 该类所有的实例都已经被回收。也就是Java堆中不存在该类及其任何派生子类的实例。
 * ● 加载该类的类加载器已经被回收。这个条件除非是经过精心设计的可替换类加载器的场景，
 *      如OSGi、JSP的重加载等，否则通常是很难达成的。
 * ● 该类对应的java.lang.Class对象没有在任何地方被引用，
 * 无法在任何地方通过反射访问该类的方法。
 *
 * Java虛拟机被允许对满足上述三个条件的无用类进行回收，
 * 这里说的仅仅是“被允许”，而并不是和对象一样，没有引用了就必然会回收。
 *
 */
public class A7_类的卸载 {

}
